/**
 * @file salesanalysis.h
 * @brief 销售分析页面头文件
 * @details 提供销售数据的多维度分析展示，包括柱状图、饼图等可视化组件
 * @author 超市管理系统开发团队
 * @date 2025
 */

#ifndef SALESANALYSIS_H
#define SALESANALYSIS_H

#include <QWidget>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QGridLayout>
#include <QStackedWidget>
#include <QPushButton>
#include <QLabel>
#include <QComboBox>
#include <QDateEdit>
#include <QGroupBox>
#include <QButtonGroup>
#include <QRadioButton>
#include <QSplitter>
#include <QtCharts/QChartView>
#include <QtCharts/QBarSeries>
#include <QtCharts/QBarSet>
#include <QtCharts/QBarCategoryAxis>
#include <QtCharts/QValueAxis>
#include <QtCharts/QPieSeries>
#include <QtCharts/QPieSlice>
#include <QtCharts/QChart>
#include <QtCharts/QLegend>
#include <QMap>
#include <QVector>
#include <QVariant>
#include <QTimer>

QT_CHARTS_USE_NAMESPACE

class Database;
class SalesAnalysisDAO;

/**
 * @class SalesAnalysis
 * @brief 销售分析主界面类
 * @details 实现销售数据的多维度分析展示，作为IM模块的第六层级窗口
 */
class SalesAnalysis : public QWidget
{
    Q_OBJECT

public:
    explicit SalesAnalysis(QWidget *parent = nullptr);
    ~SalesAnalysis();

private slots:
    /**
     * @brief 切换到销售图形分析视图
     */
    void showChartAnalysis();
    
    /**
     * @brief 切换到销售分类统计视图
     */
    void showCategoryAnalysis();
    
    /**
     * @brief 切换到导购销售统计视图
     */
    void showStaffAnalysis();
    
    /**
     * @brief 切换到支付方式统计视图
     */
    void showPaymentAnalysis();
    
    /**
     * @brief 切换月销售/日销售视图
     */
    void toggleTimeView();
    
    /**
     * @brief 切换销售额显示
     */
    void toggleSalesAmount();
    
    /**
     * @brief 切换毛利润显示
     */
    void toggleGrossProfit();
    
    /**
     * @brief 刷新数据
     */
    void refreshData();
    
    /**
     * @brief 饼图切片点击事件
     */
    void onPieSliceClicked();

private:
    /**
     * @brief 初始化用户界面
     */
    void initUI();
    
    /**
     * @brief 设置样式
     */
    void setupStyles();
    
    /**
     * @brief 创建顶部工具栏
     */
    void createToolbar();
    
    /**
     * @brief 创建销售图形分析视图
     */
    void createChartAnalysisView();
    
    /**
     * @brief 创建销售分类统计视图
     */
    void createCategoryAnalysisView();
    
    /**
     * @brief 创建导购销售统计视图
     */
    void createStaffAnalysisView();
    
    /**
     * @brief 创建支付方式统计视图
     */
    void createPaymentAnalysisView();
    
    /**
     * @brief 加载销售图表数据
     */
    void loadChartData();
    
    /**
     * @brief 加载分类统计数据
     */
    void loadCategoryData();
    
    /**
     * @brief 加载导购统计数据
     */
    void loadStaffData();
    
    /**
     * @brief 加载支付方式统计数据
     */
    void loadPaymentData();
    
    /**
     * @brief 更新柱状图
     */
    void updateBarChart();
    
    /**
     * @brief 更新分类饼图
     */
    void updateCategoryPieChart();
    
    /**
     * @brief 更新导购饼图
     */
    void updateStaffPieChart();
    
    /**
     * @brief 更新支付方式饼图
     */
    void updatePaymentPieChart();
    
    /**
     * @brief 更新坐标轴范围
     */
    void updateAxisRange();

private:
    // 主布局组件
    QVBoxLayout *m_mainLayout;
    QHBoxLayout *m_toolbarLayout;
    QStackedWidget *m_stackedWidget;
    
    // 工具栏组件
    QPushButton *m_chartBtn;
    QPushButton *m_categoryBtn;
    QPushButton *m_staffBtn;
    QPushButton *m_paymentBtn;
    QPushButton *m_refreshBtn;
    QDateEdit *m_startDateEdit;
    QDateEdit *m_endDateEdit;
    
    // 销售图形分析视图组件
    QWidget *m_chartAnalysisWidget;
    QChartView *m_chartView;
    QChart *m_chart;
    QBarSeries *m_barSeries;
    QBarSet *m_salesAmountSet;
    QBarSet *m_grossProfitSet;
    QBarCategoryAxis *m_axisX;
    QValueAxis *m_axisY;
    QPushButton *m_timeToggleBtn;
    QPushButton *m_salesAmountToggleBtn;
    QPushButton *m_grossProfitToggleBtn;
    
    // 销售分类统计视图组件
    QWidget *m_categoryAnalysisWidget;
    QChartView *m_categoryChartView;
    QChart *m_categoryChart;
    QPieSeries *m_categorySeries;
    
    // 导购销售统计视图组件
    QWidget *m_staffAnalysisWidget;
    QChartView *m_staffChartView;
    QChart *m_staffChart;
    QPieSeries *m_staffSeries;
    
    // 支付方式统计视图组件
    QWidget *m_paymentAnalysisWidget;
    QChartView *m_paymentChartView;
    QChart *m_paymentChart;
    QPieSeries *m_paymentSeries;
    
    // 数据访问层
    SalesAnalysisDAO *m_salesAnalysisDAO;
    
    // 数据存储
    QVector<QMap<QString, QVariant>> m_chartData;
    QVector<QMap<QString, QVariant>> m_categoryData;
    QVector<QMap<QString, QVariant>> m_staffData;
    QVector<QMap<QString, QVariant>> m_paymentData;
    
    // 状态标志
    bool m_isMonthlyView;  // true=月视图，false=日视图
    bool m_showSalesAmount;  // 是否显示销售额
    bool m_showGrossProfit;  // 是否显示毛利润
};

#endif // SALESANALYSIS_H